LIFO (Last-In First-Out / Stack buffer memory)
This function stores incoming data and outputs the latest/most recent not-yet-processed data.
| LGF_LIFO (FB) | ||||||||
|---|---|---|---|---|---|---|---|---|
| Bool | enable | valid | Bool | |||||
| Bool | push | busy | Bool | |||||
| Bool | pop | error | Bool | |||||
| Bool | peek | status | Word | |||||
| Bool | reset | elementCount | DInt | |||||
| Bool | clear | isEmpty | Bool | |||||
| Variant | initialItem | isFull | Bool | |||||
| diagnostics | LGF_typeDiagnostics | |||||||
| Variant | item | Variant | ||||||
| Variant | buffer | Variant | ||||||
| Identifier | Data type | Default value | Description |
|---|---|---|---|
| enable | Bool | FALSE | TRUE: Enable functionality of FB |
| push | Bool | false | Push item to the buffer |
| pop | Bool | false | Pop item from the buffer |
| peek | Bool | false | Peek item from the buffer (buffer not changed/modified) |
| reset | Bool | FALSE | Initializing the buffer (reset the index and the counter) |
| clear | Bool | FALSE | Clearing the buffer and initialize with the initial value `initialItem` (Reset index and counter). |
| initialItem | Variant | --- | Value with which the ARRAY of the buffer is initialized (usually: `0` / default value) |
| Identifier | Data type | Description |
|---|---|---|
| valid | Bool | TRUE: Valid set of output values available at the FB |
| busy | Bool | TRUE: FB is active and new output values can be expected |
| error | Bool | FALSE: No error TRUE: An error occurred during the execution of the FB |
| status | Word | 16#0000-16#7FFF: Status of the FB 16#8000-16#FFFF: Error identification (see following Table) |
| elementCount | DInt | Number of elements in the buffer |
| isEmpty | Bool | TRUE: Buffer is empty |
| isFull | Bool | TRUE: Buffer is full |
| diagnostics | LGF_typeDiagnostics | Diagnostic structure to store and transfer diagnostic information from blocks through the interface. |
| Identifier | Data type | Description |
|---|---|---|
| item | Variant | The entry that is either returned from the ring buffer or written into the buffer |
| buffer | Variant | The ARRAY that is used as the ring buffer. (Array of…) |
| Code / Value | Identifier / Description |
|---|---|
| 16#0000 | STATUS_NO_ERROR Status: Execution finished without errors |
| 16#7000 | STATUS_NO_CURRENT_JOBS Status: No current jobs, initial state |
| 16#7001 | STATUS_FIRST_CALL First call after incoming new job (rising edge 'enable') |
| 16#7002 | STATUS_SUBSEQUENT_CALL Status: Subsequent call during active processing without further details |
| 16#8001 | ERR_BUFFER_EMPTY Error: The buffer is empty |
| 16#8002 | ERR_BUFFER_FULL Error: The buffer is full |
| 16#8200 | ERR_NO_ARRAY Error: No array is present at the input `buffer` |
| 16#8201 | ERR_WRONG_TYPE_ITEM Error: The data type of the InOut parameter `item` does not correspond to the data type of the array elements of the input `buffer` |
| 16#8202 | ERR_WRONG_TYPE_INITIAL_ITEM Error: The data type of the input `initialValue` does not correspond to the data type of the InOut parameter `item` |
| 16#8203 | ERR_BOOL_NOT_SUPPORTED Error: Boolean variables and arrays are not supported by `MOVE_BLOCK_VARIANT`. (Use a PLC Datatype instead) |
| 16#8204 | ERR_MULTIPLE_COMMANDS_DEDECTED Error: Multiple commands in the same cycle detected |
| 16#8600 | ERR_UNDEFINED_STATE Error: Due to an undefined state in state machine |
| 16#8601 | ERR_INDEX_IN_ARRAY_LIMITS_1 Error: The tag `statLastItemIndex` is not within the array limits |
| 16#8602 | ERR_INDEX_IN_ARRAY_LIMITS_2 Error: The tag `statElementCount` is not within the array limits |
| 16#8610 | ERR_CLEAR_BUFFER Error: While clearing buffer in block `MOVE_BLK_VARIANT` - check `subFunctionStatus` code |
| 16#8611 | ERR_RETURN_LAST_ENTRY Error: While return first entry of buffer in block `MOVE_BLK_VARIANT` - check `subFunctionStatus` code (POP & PEEK) |
| 16#8612 | ERR_POP_REPLACE_ITEM_BY_INIT_VALUE Error: While replace item by initial value in block `MOVE_BLK_VARIANT` - check `subFunctionStatus` code (POP) |
| 16#8613 | ERR_WRITE_ENTRY Error: While write entry to buffer in block `MOVE_BLK_VARIANT` - check `subFunctionStatus` code (PUSH) |
Diagnostic structure to store and transfer diagnostic information from blocks through the interface.
| Identifier | Data type | Default value | Description |
|---|---|---|---|
| status | Word | 16#0000 | Status of the Block or error identification when error occurred |
| subfunctionStatus | Word | 16#0000 | Status or return value of called FB's, FC's and system blocks |
| stateNumber | DInt | 0 | State in the state machine of the block where the error occurred |
subFunctionStatus. In this case, the output value in status indicates which command caused the error. In this case, refer to the TIA Portal Online Help section for information on the respective commands.With the push input, a new item is stored from the InOut parameter item in the next free position in the buffer. The output elementCount is incremented by one.
With the pop input, the latest / most recent item is output to the InOut parameter item, and this field in the buffer is replaced by the value at the parameter initialItem. The output elementCount is decremented by one.
The peek input allows the last entry in the buffer to be read out. The buffer is not changed.
With the reset input, the buffer is initialized, and the index and counter are reset. The elementCount output is set to zero and the isEmpty output is set to TRUE.
With the clear input, the buffer is emptied and initialized with the initial value initialItem. Index and counter are reset. The elementCount output is set to zero and the isEmpty output is set to TRUE.
| Version & Date | Change description | |
|---|---|---|
| 1.0.0 | Siemens Industry Online Support | |
| 10.07.2018 | First released version | |
| 1.0.1 | Siemens Industry Online Support | |
| 17.08.2018 | Upgrade: TIA V15 Update 2 | |
| 1.0.2 | Siemens Industry Online Support | |
| 23.11.2018 | Upgrade: TIA V15.1 | |
| 2.0.0 | Siemens Industry Online Support | |
| 29.01.2019 | Output "done" removed (not necessary, because block works synchronous) | |
| 3.0.0 | Simatic Systems Support | |
| 22.10.2019 | Code refactoring, comments added Interface change (push, pop, peek etc.) Set version to V3.0.0, harmonize the version of the whole library | |
| 3.0.1 | Simatic Systems Support | |
| 15.02.2021 | Insert documentation | |
| 4.0.0 | Simatic Systems Support | |
| 04.09.2024 | Rework to PLC Open `Enable` behavior Add `isFull` outputs Rework to diagnostic output datatype | |
| 4.0.1 | Simatic Systems Support | |
| 15.12.2025 | Set correct start value for internal diagnostic status, fixes initial enabling error | |